{
 "metadata": {
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0-final"
  },
  "orig_nbformat": 2,
  "kernelspec": {
   "name": "Python 3.7.0 64-bit ('py37': conda)",
   "display_name": "Python 3.7.0 64-bit ('py37': conda)",
   "metadata": {
    "interpreter": {
     "hash": "d1d7cbd7ea310cd54c62fa939877dbcd600804f23a57e3701f31ba0ad7f22c97"
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2,
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "1.6.0\n"
     ]
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import sys\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "print(torch.__version__)\n",
    "torch.set_default_tensor_type(torch.FloatTensor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data_path ='./dataset/train.csv'\n",
    "train = pd.read_csv(train_data_path)\n",
    "\n",
    "num_of_train_data = train.shape[0]\n",
    "\n",
    "test_data_path ='./dataset/test.csv'\n",
    "test = pd.read_csv(test_data_path)"
   ]
  },
  {
   "source": [
    "训练数据共1460个样本，81个维度，其中，Id是每个样本的唯一编号，SalePrice是房价，也是我们要拟合的目标值。其他维度（列）有数值类特征，也有非数值列，或者叫分类特征，英文为Categorical。"
   ],
   "cell_type": "markdown",
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "(1460, 81)"
      ]
     },
     "metadata": {},
     "execution_count": 53
    }
   ],
   "source": [
    "train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "                Id   MSSubClass  LotFrontage        LotArea  OverallQual  \\\n",
       "count  1460.000000  1460.000000  1201.000000    1460.000000  1460.000000   \n",
       "mean    730.500000    56.897260    70.049958   10516.828082     6.099315   \n",
       "std     421.610009    42.300571    24.284752    9981.264932     1.382997   \n",
       "min       1.000000    20.000000    21.000000    1300.000000     1.000000   \n",
       "25%     365.750000    20.000000    59.000000    7553.500000     5.000000   \n",
       "50%     730.500000    50.000000    69.000000    9478.500000     6.000000   \n",
       "75%    1095.250000    70.000000    80.000000   11601.500000     7.000000   \n",
       "max    1460.000000   190.000000   313.000000  215245.000000    10.000000   \n",
       "\n",
       "       OverallCond    YearBuilt  YearRemodAdd   MasVnrArea   BsmtFinSF1  ...  \\\n",
       "count  1460.000000  1460.000000   1460.000000  1452.000000  1460.000000  ...   \n",
       "mean      5.575342  1971.267808   1984.865753   103.685262   443.639726  ...   \n",
       "std       1.112799    30.202904     20.645407   181.066207   456.098091  ...   \n",
       "min       1.000000  1872.000000   1950.000000     0.000000     0.000000  ...   \n",
       "25%       5.000000  1954.000000   1967.000000     0.000000     0.000000  ...   \n",
       "50%       5.000000  1973.000000   1994.000000     0.000000   383.500000  ...   \n",
       "75%       6.000000  2000.000000   2004.000000   166.000000   712.250000  ...   \n",
       "max       9.000000  2010.000000   2010.000000  1600.000000  5644.000000  ...   \n",
       "\n",
       "        WoodDeckSF  OpenPorchSF  EnclosedPorch    3SsnPorch  ScreenPorch  \\\n",
       "count  1460.000000  1460.000000    1460.000000  1460.000000  1460.000000   \n",
       "mean     94.244521    46.660274      21.954110     3.409589    15.060959   \n",
       "std     125.338794    66.256028      61.119149    29.317331    55.757415   \n",
       "min       0.000000     0.000000       0.000000     0.000000     0.000000   \n",
       "25%       0.000000     0.000000       0.000000     0.000000     0.000000   \n",
       "50%       0.000000    25.000000       0.000000     0.000000     0.000000   \n",
       "75%     168.000000    68.000000       0.000000     0.000000     0.000000   \n",
       "max     857.000000   547.000000     552.000000   508.000000   480.000000   \n",
       "\n",
       "          PoolArea       MiscVal       MoSold       YrSold      SalePrice  \n",
       "count  1460.000000   1460.000000  1460.000000  1460.000000    1460.000000  \n",
       "mean      2.758904     43.489041     6.321918  2007.815753  180921.195890  \n",
       "std      40.177307    496.123024     2.703626     1.328095   79442.502883  \n",
       "min       0.000000      0.000000     1.000000  2006.000000   34900.000000  \n",
       "25%       0.000000      0.000000     5.000000  2007.000000  129975.000000  \n",
       "50%       0.000000      0.000000     6.000000  2008.000000  163000.000000  \n",
       "75%       0.000000      0.000000     8.000000  2009.000000  214000.000000  \n",
       "max     738.000000  15500.000000    12.000000  2010.000000  755000.000000  \n",
       "\n",
       "[8 rows x 38 columns]"
      ],
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Id</th>\n      <th>MSSubClass</th>\n      <th>LotFrontage</th>\n      <th>LotArea</th>\n      <th>OverallQual</th>\n      <th>OverallCond</th>\n      <th>YearBuilt</th>\n      <th>YearRemodAdd</th>\n      <th>MasVnrArea</th>\n      <th>BsmtFinSF1</th>\n      <th>...</th>\n      <th>WoodDeckSF</th>\n      <th>OpenPorchSF</th>\n      <th>EnclosedPorch</th>\n      <th>3SsnPorch</th>\n      <th>ScreenPorch</th>\n      <th>PoolArea</th>\n      <th>MiscVal</th>\n      <th>MoSold</th>\n      <th>YrSold</th>\n      <th>SalePrice</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1201.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1452.000000</td>\n      <td>1460.000000</td>\n      <td>...</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n      <td>1460.000000</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>730.500000</td>\n      <td>56.897260</td>\n      <td>70.049958</td>\n      <td>10516.828082</td>\n      <td>6.099315</td>\n      <td>5.575342</td>\n      <td>1971.267808</td>\n      <td>1984.865753</td>\n      <td>103.685262</td>\n      <td>443.639726</td>\n      <td>...</td>\n      <td>94.244521</td>\n      <td>46.660274</td>\n      <td>21.954110</td>\n      <td>3.409589</td>\n      <td>15.060959</td>\n      <td>2.758904</td>\n      <td>43.489041</td>\n      <td>6.321918</td>\n      <td>2007.815753</td>\n      <td>180921.195890</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>421.610009</td>\n      <td>42.300571</td>\n      <td>24.284752</td>\n      <td>9981.264932</td>\n      <td>1.382997</td>\n      <td>1.112799</td>\n      <td>30.202904</td>\n      <td>20.645407</td>\n      <td>181.066207</td>\n      <td>456.098091</td>\n      <td>...</td>\n      <td>125.338794</td>\n      <td>66.256028</td>\n      <td>61.119149</td>\n      <td>29.317331</td>\n      <td>55.757415</td>\n      <td>40.177307</td>\n      <td>496.123024</td>\n      <td>2.703626</td>\n      <td>1.328095</td>\n      <td>79442.502883</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>1.000000</td>\n      <td>20.000000</td>\n      <td>21.000000</td>\n      <td>1300.000000</td>\n      <td>1.000000</td>\n      <td>1.000000</td>\n      <td>1872.000000</td>\n      <td>1950.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>1.000000</td>\n      <td>2006.000000</td>\n      <td>34900.000000</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>365.750000</td>\n      <td>20.000000</td>\n      <td>59.000000</td>\n      <td>7553.500000</td>\n      <td>5.000000</td>\n      <td>5.000000</td>\n      <td>1954.000000</td>\n      <td>1967.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>5.000000</td>\n      <td>2007.000000</td>\n      <td>129975.000000</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>730.500000</td>\n      <td>50.000000</td>\n      <td>69.000000</td>\n      <td>9478.500000</td>\n      <td>6.000000</td>\n      <td>5.000000</td>\n      <td>1973.000000</td>\n      <td>1994.000000</td>\n      <td>0.000000</td>\n      <td>383.500000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>25.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>6.000000</td>\n      <td>2008.000000</td>\n      <td>163000.000000</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>1095.250000</td>\n      <td>70.000000</td>\n      <td>80.000000</td>\n      <td>11601.500000</td>\n      <td>7.000000</td>\n      <td>6.000000</td>\n      <td>2000.000000</td>\n      <td>2004.000000</td>\n      <td>166.000000</td>\n      <td>712.250000</td>\n      <td>...</td>\n      <td>168.000000</td>\n      <td>68.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>8.000000</td>\n      <td>2009.000000</td>\n      <td>214000.000000</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>1460.000000</td>\n      <td>190.000000</td>\n      <td>313.000000</td>\n      <td>215245.000000</td>\n      <td>10.000000</td>\n      <td>9.000000</td>\n      <td>2010.000000</td>\n      <td>2010.000000</td>\n      <td>1600.000000</td>\n      <td>5644.000000</td>\n      <td>...</td>\n      <td>857.000000</td>\n      <td>547.000000</td>\n      <td>552.000000</td>\n      <td>508.000000</td>\n      <td>480.000000</td>\n      <td>738.000000</td>\n      <td>15500.000000</td>\n      <td>12.000000</td>\n      <td>2010.000000</td>\n      <td>755000.000000</td>\n    </tr>\n  </tbody>\n</table>\n<p>8 rows × 38 columns</p>\n</div>"
     },
     "metadata": {},
     "execution_count": 54
    }
   ],
   "source": [
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 房价，要拟合的目标值\n",
    "target = train.SalePrice\n",
    "\n",
    "# 输入特征，可以将SalePrice列扔掉\n",
    "train.drop(['SalePrice'],axis = 1 , inplace = True)\n",
    "\n",
    "# 将train和test合并到一起，一块处理特征，得到相同的特征值，方便预测test的房价\n",
    "combined = train.append(test)\n",
    "combined.reset_index(inplace=True)\n",
    "combined.drop(['index', 'Id'], inplace=True, axis=1)"
   ]
  },
  {
   "source": [
    "## 对数据进行简单的特征工程\n",
    "\n",
    "1. 对于数值类特征，过滤掉带有空值的列。\n",
    "2. 对于非数值类特征，过滤掉带有空值的列，同时进行One-Hot编码。"
   ],
   "cell_type": "markdown",
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 选出非空列\n",
    "def get_cols_with_no_nans(df,col_type):\n",
    "    '''\n",
    "    Arguments :\n",
    "    df : The dataframe to process\n",
    "    col_type : \n",
    "          num : to only get numerical columns with no nans\n",
    "          no_num : to only get nun-numerical columns with no nans\n",
    "          all : to get any columns with no nans    \n",
    "    '''\n",
    "    if (col_type == 'num'):\n",
    "        predictors = df.select_dtypes(exclude=['object'])\n",
    "    elif (col_type == 'no_num'):\n",
    "        predictors = df.select_dtypes(include=['object'])\n",
    "    elif (col_type == 'all'):\n",
    "        predictors = df\n",
    "    else :\n",
    "        print('Error : choose a type (num, no_num, all)')\n",
    "        return 0\n",
    "    cols_with_no_nans = []\n",
    "    for col in predictors.columns:\n",
    "        if not df[col].isnull().any():\n",
    "            cols_with_no_nans.append(col)\n",
    "    return cols_with_no_nans"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "['MSSubClass', 'LotArea', 'OverallQual', 'OverallCond', 'YearBuilt']\nNumber of numerical columns with no nan values : 25\n['Street', 'LotShape', 'LandContour', 'LotConfig', 'LandSlope']\nNumber of non-numerical columns with no nan values : 20\n"
     ]
    }
   ],
   "source": [
    "num_cols = get_cols_with_no_nans(combined, 'num')\n",
    "cat_cols = get_cols_with_no_nans(combined, 'no_num')\n",
    "\n",
    "# 过滤掉含有缺失值的特征\n",
    "combined = combined[num_cols + cat_cols]\n",
    "\n",
    "print(num_cols[:5])\n",
    "print ('Number of numerical columns with no nan values: ',len(num_cols))\n",
    "print(cat_cols[:5])\n",
    "print ('Number of non-numerical columns with no nan values: ',len(cat_cols))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 对分类特征进行One-Hot编码\n",
    "def oneHotEncode(df,colNames):\n",
    "    for col in colNames:\n",
    "        if( df[col].dtype == np.dtype('object')):\n",
    "            # pandas.get_dummies 可以对分类特征进行One-Hot编码\n",
    "            dummies = pd.get_dummies(df[col],prefix=col)\n",
    "            df = pd.concat([df,dummies],axis=1)\n",
    "\n",
    "            # drop the encoded column\n",
    "            df.drop([col],axis = 1 , inplace=True)\n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "There were 45 columns before encoding categorical features\nThere are 149 columns after encoding categorical features\n"
     ]
    }
   ],
   "source": [
    "print('There were {} columns before encoding categorical features'.format(combined.shape[1]))\n",
    "combined = oneHotEncode(combined, cat_cols)\n",
    "print('There are {} columns after encoding categorical features'.format(combined.shape[1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Net(nn.Module):\n",
    "    def __init__(self, features):\n",
    "        super(Net, self).__init__()\n",
    "        \n",
    "        self.linear_relu1 = nn.Linear(features, 128)\n",
    "        self.linear_relu2 = nn.Linear(128, 256)\n",
    "        self.linear_relu3 = nn.Linear(256, 256)\n",
    "        self.linear_relu4 = nn.Linear(256, 256)\n",
    "        self.linear5 = nn.Linear(256, 1)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        \n",
    "        y_pred = self.linear_relu1(x)\n",
    "        y_pred = nn.functional.relu(y_pred)\n",
    "\n",
    "        y_pred = self.linear_relu2(y_pred)\n",
    "        y_pred = nn.functional.relu(y_pred)\n",
    "\n",
    "        y_pred = self.linear_relu3(y_pred)\n",
    "        y_pred = nn.functional.relu(y_pred)\n",
    "\n",
    "        y_pred = self.linear_relu4(y_pred)\n",
    "        y_pred = nn.functional.relu(y_pred)\n",
    "\n",
    "        y_pred = self.linear5(y_pred)\n",
    "        return y_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "train data size: torch.Size([1460, 149])\nlabel data size: torch.Size([1460, 1])\ntest data size: torch.Size([1459, 149])\n"
     ]
    }
   ],
   "source": [
    "# 训练数据集特征\n",
    "train_features = torch.tensor(combined[:num_of_train_data].values, dtype=torch.float)\n",
    "# 训练数据集目标\n",
    "train_labels = torch.tensor(target.values, dtype=torch.float).view(-1, 1)\n",
    "# 测试数据集特征\n",
    "test_features = torch.tensor(combined[num_of_train_data:].values, dtype=torch.float)\n",
    "\n",
    "print(\"train data size: \", train_features.shape)\n",
    "print(\"label data size: \", train_labels.shape)\n",
    "print(\"test data size: \", test_features.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = Net(features=train_features.shape[1])\n",
    "# 使用均方误差作为损失函数\n",
    "criterion = nn.MSELoss(reduction='mean')\n",
    "\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "losses = []\n",
    "\n",
    "# 训练500轮\n",
    "for t in range(500):\n",
    "    y_pred = model(train_features)\n",
    "    \n",
    "    loss = criterion(y_pred, train_labels)\n",
    "    # print(t, loss.item())\n",
    "    losses.append(loss.item())\n",
    "    \n",
    "    if torch.isnan(loss):\n",
    "        break\n",
    "    \n",
    "    # 将神经网络中各参数的梯度清零。\n",
    "    # PyTorch的backward()方法计算梯度会默认将本次计算的梯度与缓存中已有的梯度加和。\n",
    "    # 必须在反向传播前先清零。\n",
    "    optimizer.zero_grad()\n",
    "\n",
    "    # 反向传播，计算各参数对于损失loss的梯度\n",
    "    loss.backward()\n",
    "\n",
    "    # 根据刚刚反向传播得到的梯度更新模型参数\n",
    "    optimizer.step()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": "<Figure size 864x720 with 1 Axes>",
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"585.276563pt\" version=\"1.1\" viewBox=\"0 0 706.903125 585.276563\" width=\"706.903125pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n  <style type=\"text/css\">\n*{stroke-linecap:butt;stroke-linejoin:round;}\n  </style>\n </defs>\n <g id=\"figure_1\">\n  <g id=\"patch_1\">\n   <path d=\"M 0 585.276563 \nL 706.903125 585.276563 \nL 706.903125 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n  </g>\n  <g id=\"axes_1\">\n   <g id=\"patch_2\">\n    <path d=\"M 30.103125 561.398438 \nL 699.703125 561.398438 \nL 699.703125 17.798438 \nL 30.103125 17.798438 \nz\n\" style=\"fill:#ffffff;\"/>\n   </g>\n   <g id=\"matplotlib.axis_1\">\n    <g id=\"xtick_1\">\n     <g id=\"line2d_1\">\n      <defs>\n       <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"md922238a8f\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"60.539489\" xlink:href=\"#md922238a8f\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_1\">\n      <!-- 0 -->\n      <defs>\n       <path d=\"M 31.78125 66.40625 \nQ 24.171875 66.40625 20.328125 58.90625 \nQ 16.5 51.421875 16.5 36.375 \nQ 16.5 21.390625 20.328125 13.890625 \nQ 24.171875 6.390625 31.78125 6.390625 \nQ 39.453125 6.390625 43.28125 13.890625 \nQ 47.125 21.390625 47.125 36.375 \nQ 47.125 51.421875 43.28125 58.90625 \nQ 39.453125 66.40625 31.78125 66.40625 \nz\nM 31.78125 74.21875 \nQ 44.046875 74.21875 50.515625 64.515625 \nQ 56.984375 54.828125 56.984375 36.375 \nQ 56.984375 17.96875 50.515625 8.265625 \nQ 44.046875 -1.421875 31.78125 -1.421875 \nQ 19.53125 -1.421875 13.0625 8.265625 \nQ 6.59375 17.96875 6.59375 36.375 \nQ 6.59375 54.828125 13.0625 64.515625 \nQ 19.53125 74.21875 31.78125 74.21875 \nz\n\" id=\"DejaVuSans-48\"/>\n      </defs>\n      <g transform=\"translate(57.358239 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_2\">\n     <g id=\"line2d_2\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"182.528922\" xlink:href=\"#md922238a8f\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_2\">\n      <!-- 100 -->\n      <defs>\n       <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n      </defs>\n      <g transform=\"translate(172.985172 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_3\">\n     <g id=\"line2d_3\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"304.518355\" xlink:href=\"#md922238a8f\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_3\">\n      <!-- 200 -->\n      <defs>\n       <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n      </defs>\n      <g transform=\"translate(294.974605 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-50\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_4\">\n     <g id=\"line2d_4\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"426.507789\" xlink:href=\"#md922238a8f\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_4\">\n      <!-- 300 -->\n      <defs>\n       <path d=\"M 40.578125 39.3125 \nQ 47.65625 37.796875 51.625 33 \nQ 55.609375 28.21875 55.609375 21.1875 \nQ 55.609375 10.40625 48.1875 4.484375 \nQ 40.765625 -1.421875 27.09375 -1.421875 \nQ 22.515625 -1.421875 17.65625 -0.515625 \nQ 12.796875 0.390625 7.625 2.203125 \nL 7.625 11.71875 \nQ 11.71875 9.328125 16.59375 8.109375 \nQ 21.484375 6.890625 26.8125 6.890625 \nQ 36.078125 6.890625 40.9375 10.546875 \nQ 45.796875 14.203125 45.796875 21.1875 \nQ 45.796875 27.640625 41.28125 31.265625 \nQ 36.765625 34.90625 28.71875 34.90625 \nL 20.21875 34.90625 \nL 20.21875 43.015625 \nL 29.109375 43.015625 \nQ 36.375 43.015625 40.234375 45.921875 \nQ 44.09375 48.828125 44.09375 54.296875 \nQ 44.09375 59.90625 40.109375 62.90625 \nQ 36.140625 65.921875 28.71875 65.921875 \nQ 24.65625 65.921875 20.015625 65.03125 \nQ 15.375 64.15625 9.8125 62.3125 \nL 9.8125 71.09375 \nQ 15.4375 72.65625 20.34375 73.4375 \nQ 25.25 74.21875 29.59375 74.21875 \nQ 40.828125 74.21875 47.359375 69.109375 \nQ 53.90625 64.015625 53.90625 55.328125 \nQ 53.90625 49.265625 50.4375 45.09375 \nQ 46.96875 40.921875 40.578125 39.3125 \nz\n\" id=\"DejaVuSans-51\"/>\n      </defs>\n      <g transform=\"translate(416.964039 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-51\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_5\">\n     <g id=\"line2d_5\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"548.497222\" xlink:href=\"#md922238a8f\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_5\">\n      <!-- 400 -->\n      <defs>\n       <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n      </defs>\n      <g transform=\"translate(538.953472 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-52\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_6\">\n     <g id=\"line2d_6\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"670.486656\" xlink:href=\"#md922238a8f\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_6\">\n      <!-- 500 -->\n      <defs>\n       <path d=\"M 10.796875 72.90625 \nL 49.515625 72.90625 \nL 49.515625 64.59375 \nL 19.828125 64.59375 \nL 19.828125 46.734375 \nQ 21.96875 47.46875 24.109375 47.828125 \nQ 26.265625 48.1875 28.421875 48.1875 \nQ 40.625 48.1875 47.75 41.5 \nQ 54.890625 34.8125 54.890625 23.390625 \nQ 54.890625 11.625 47.5625 5.09375 \nQ 40.234375 -1.421875 26.90625 -1.421875 \nQ 22.3125 -1.421875 17.546875 -0.640625 \nQ 12.796875 0.140625 7.71875 1.703125 \nL 7.71875 11.625 \nQ 12.109375 9.234375 16.796875 8.0625 \nQ 21.484375 6.890625 26.703125 6.890625 \nQ 35.15625 6.890625 40.078125 11.328125 \nQ 45.015625 15.765625 45.015625 23.390625 \nQ 45.015625 31 40.078125 35.4375 \nQ 35.15625 39.890625 26.703125 39.890625 \nQ 22.75 39.890625 18.8125 39.015625 \nQ 14.890625 38.140625 10.796875 36.28125 \nz\n\" id=\"DejaVuSans-53\"/>\n      </defs>\n      <g transform=\"translate(660.942906 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-53\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n   </g>\n   <g id=\"matplotlib.axis_2\">\n    <g id=\"ytick_1\">\n     <g id=\"line2d_7\">\n      <defs>\n       <path d=\"M 0 0 \nL -3.5 0 \n\" id=\"md5bcc539a4\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#md5bcc539a4\" y=\"521.302916\"/>\n      </g>\n     </g>\n     <g id=\"text_7\">\n      <!-- 0.5 -->\n      <defs>\n       <path d=\"M 10.6875 12.40625 \nL 21 12.40625 \nL 21 0 \nL 10.6875 0 \nz\n\" id=\"DejaVuSans-46\"/>\n      </defs>\n      <g transform=\"translate(7.2 525.102135)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_2\">\n     <g id=\"line2d_8\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#md5bcc539a4\" y=\"451.002958\"/>\n      </g>\n     </g>\n     <g id=\"text_8\">\n      <!-- 1.0 -->\n      <g transform=\"translate(7.2 454.802176)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_3\">\n     <g id=\"line2d_9\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#md5bcc539a4\" y=\"380.702999\"/>\n      </g>\n     </g>\n     <g id=\"text_9\">\n      <!-- 1.5 -->\n      <g transform=\"translate(7.2 384.502218)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_4\">\n     <g id=\"line2d_10\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#md5bcc539a4\" y=\"310.403041\"/>\n      </g>\n     </g>\n     <g id=\"text_10\">\n      <!-- 2.0 -->\n      <g transform=\"translate(7.2 314.20226)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-50\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_5\">\n     <g id=\"line2d_11\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#md5bcc539a4\" y=\"240.103083\"/>\n      </g>\n     </g>\n     <g id=\"text_11\">\n      <!-- 2.5 -->\n      <g transform=\"translate(7.2 243.902301)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-50\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_6\">\n     <g id=\"line2d_12\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#md5bcc539a4\" y=\"169.803124\"/>\n      </g>\n     </g>\n     <g id=\"text_12\">\n      <!-- 3.0 -->\n      <g transform=\"translate(7.2 173.602343)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-51\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_7\">\n     <g id=\"line2d_13\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#md5bcc539a4\" y=\"99.503166\"/>\n      </g>\n     </g>\n     <g id=\"text_13\">\n      <!-- 3.5 -->\n      <g transform=\"translate(7.2 103.302385)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-51\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_8\">\n     <g id=\"line2d_14\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#md5bcc539a4\" y=\"29.203208\"/>\n      </g>\n     </g>\n     <g id=\"text_14\">\n      <!-- 4.0 -->\n      <g transform=\"translate(7.2 33.002426)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-52\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"text_15\">\n     <!-- 1e10 -->\n     <defs>\n      <path d=\"M 56.203125 29.59375 \nL 56.203125 25.203125 \nL 14.890625 25.203125 \nQ 15.484375 15.921875 20.484375 11.0625 \nQ 25.484375 6.203125 34.421875 6.203125 \nQ 39.59375 6.203125 44.453125 7.46875 \nQ 49.3125 8.734375 54.109375 11.28125 \nL 54.109375 2.78125 \nQ 49.265625 0.734375 44.1875 -0.34375 \nQ 39.109375 -1.421875 33.890625 -1.421875 \nQ 20.796875 -1.421875 13.15625 6.1875 \nQ 5.515625 13.8125 5.515625 26.8125 \nQ 5.515625 40.234375 12.765625 48.109375 \nQ 20.015625 56 32.328125 56 \nQ 43.359375 56 49.78125 48.890625 \nQ 56.203125 41.796875 56.203125 29.59375 \nz\nM 47.21875 32.234375 \nQ 47.125 39.59375 43.09375 43.984375 \nQ 39.0625 48.390625 32.421875 48.390625 \nQ 24.90625 48.390625 20.390625 44.140625 \nQ 15.875 39.890625 15.1875 32.171875 \nz\n\" id=\"DejaVuSans-101\"/>\n     </defs>\n     <g transform=\"translate(30.103125 14.798438)scale(0.1 -0.1)\">\n      <use xlink:href=\"#DejaVuSans-49\"/>\n      <use x=\"63.623047\" xlink:href=\"#DejaVuSans-101\"/>\n      <use x=\"125.146484\" xlink:href=\"#DejaVuSans-49\"/>\n      <use x=\"188.769531\" xlink:href=\"#DejaVuSans-48\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"line2d_15\">\n    <path clip-path=\"url(#p128ede5ace)\" d=\"M 60.539489 42.507528 \nL 93.476636 44.207347 \nL 100.796002 44.928082 \nL 106.895473 45.761636 \nL 111.775051 46.636366 \nL 116.654628 47.748424 \nL 120.314311 48.774558 \nL 123.973994 49.996439 \nL 127.633677 51.445627 \nL 131.29336 53.164277 \nL 134.953043 55.200131 \nL 138.612726 57.599665 \nL 141.052515 59.427735 \nL 143.492303 61.459155 \nL 145.932092 63.71483 \nL 148.371881 66.215779 \nL 150.811669 68.984232 \nL 153.251458 72.041498 \nL 155.691247 75.414355 \nL 158.131035 79.129411 \nL 160.570824 83.208664 \nL 163.010613 87.677684 \nL 165.450401 92.563078 \nL 167.89019 97.889552 \nL 170.329979 103.681639 \nL 172.769767 109.965427 \nL 175.209556 116.763923 \nL 177.649345 124.095958 \nL 180.089133 131.979071 \nL 182.528922 140.434711 \nL 184.968711 149.480099 \nL 188.628394 164.155602 \nL 192.288077 180.155468 \nL 195.94776 197.441168 \nL 199.607443 215.933027 \nL 203.267126 235.492658 \nL 208.146703 262.853508 \nL 220.345646 332.555534 \nL 224.005329 351.865829 \nL 226.445118 363.79976 \nL 228.884907 374.782783 \nL 231.324695 384.651948 \nL 233.764484 393.27935 \nL 236.204273 400.578718 \nL 237.424167 403.720209 \nL 238.644061 406.524382 \nL 239.863956 408.998566 \nL 241.08385 411.158052 \nL 242.303744 413.021223 \nL 243.523639 414.610858 \nL 244.743533 415.953419 \nL 245.963427 417.078851 \nL 247.183322 418.019695 \nL 249.62311 419.480703 \nL 252.062899 420.600463 \nL 256.942476 422.671217 \nL 259.382265 423.892652 \nL 261.822054 425.310568 \nL 265.481737 427.772328 \nL 271.581208 432.319123 \nL 277.68068 436.7771 \nL 282.560257 440.098228 \nL 289.879623 444.780719 \nL 311.837721 458.344971 \nL 320.376982 463.419043 \nL 333.795819 471.083113 \nL 344.774868 477.073042 \nL 354.534023 482.144839 \nL 364.293178 486.979922 \nL 374.052333 491.56279 \nL 382.591593 495.329626 \nL 391.130853 498.858782 \nL 400.890008 502.636524 \nL 410.649163 506.148777 \nL 419.188423 508.991032 \nL 428.947578 511.976577 \nL 437.486838 514.358732 \nL 447.245993 516.830361 \nL 457.005147 519.077015 \nL 467.984196 521.365358 \nL 478.963245 523.403408 \nL 489.942294 525.224783 \nL 502.141238 527.015262 \nL 513.120287 528.394025 \nL 526.539124 529.821768 \nL 539.957962 531.025473 \nL 554.596694 532.114268 \nL 570.45532 533.078586 \nL 589.97363 534.040568 \nL 613.151622 534.952865 \nL 647.308663 536.05203 \nL 669.266761 536.689347 \nL 669.266761 536.689347 \n\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n   </g>\n   <g id=\"patch_3\">\n    <path d=\"M 30.103125 561.398438 \nL 30.103125 17.798437 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_4\">\n    <path d=\"M 699.703125 561.398438 \nL 699.703125 17.798437 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_5\">\n    <path d=\"M 30.103125 561.398438 \nL 699.703125 561.398438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_6\">\n    <path d=\"M 30.103125 17.798438 \nL 699.703125 17.798438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n  </g>\n </g>\n <defs>\n  <clipPath id=\"p128ede5ace\">\n   <rect height=\"543.6\" width=\"669.6\" x=\"30.103125\" y=\"17.798438\"/>\n  </clipPath>\n </defs>\n</svg>\n",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "source": [
    "# 绘制训练过程的损失变化\n",
    "plt.figure(figsize=(12, 10))\n",
    "plt.plot(range(len(losses)), losses)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Net(\n  (linear_relu1): Linear(in_features=149, out_features=128, bias=True)\n  (linear_relu2): Linear(in_features=128, out_features=256, bias=True)\n  (linear_relu3): Linear(in_features=256, out_features=256, bias=True)\n  (linear_relu4): Linear(in_features=256, out_features=256, bias=True)\n  (linear5): Linear(in_features=256, out_features=1, bias=True)\n)\n"
     ]
    }
   ],
   "source": [
    "print(model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "model total parameters:  184065\n"
     ]
    }
   ],
   "source": [
    "model_total_params = sum(p.numel() for p in model.parameters())\n",
    "print(\"model total parameters: \", model_total_params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "predictions = model(test_features).detach().numpy()\n",
    "my_submission = pd.DataFrame({'Id':pd.read_csv('./dataset/test.csv').Id,'SalePrice': predictions[:, 0]})\n",
    "my_submission.to_csv('{}.csv'.format('./dataset/submission'), index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_sequential = nn.Sequential(\n",
    "          nn.Linear(train_features.shape[1], 128),\n",
    "          nn.ReLU(),\n",
    "          nn.Linear(128, 256),\n",
    "          nn.ReLU(),\n",
    "          nn.Linear(256, 256),\n",
    "          nn.ReLU(),\n",
    "          nn.Linear(256, 256),\n",
    "          nn.ReLU(),\n",
    "          nn.Linear(256, 1)\n",
    "        )\n",
    "\n",
    "optimizer_sequential = torch.optim.Adam(model_sequential.parameters(), lr=1e-4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "losses_sequential = []\n",
    "\n",
    "# 训练500轮\n",
    "for t in range(500):\n",
    "    y_pred = model_sequential(train_features)\n",
    "    \n",
    "    loss = criterion(y_pred, train_labels)\n",
    "    # print(t, loss.item())\n",
    "    losses_sequential.append(loss.item())\n",
    "    \n",
    "    if torch.isnan(loss):\n",
    "        break\n",
    "    \n",
    "    optimizer_sequential.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer_sequential.step()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": "<Figure size 864x720 with 1 Axes>",
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"585.276563pt\" version=\"1.1\" viewBox=\"0 0 706.903125 585.276563\" width=\"706.903125pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n  <style type=\"text/css\">\n*{stroke-linecap:butt;stroke-linejoin:round;}\n  </style>\n </defs>\n <g id=\"figure_1\">\n  <g id=\"patch_1\">\n   <path d=\"M 0 585.276563 \nL 706.903125 585.276563 \nL 706.903125 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n  </g>\n  <g id=\"axes_1\">\n   <g id=\"patch_2\">\n    <path d=\"M 30.103125 561.398438 \nL 699.703125 561.398438 \nL 699.703125 17.798438 \nL 30.103125 17.798438 \nz\n\" style=\"fill:#ffffff;\"/>\n   </g>\n   <g id=\"matplotlib.axis_1\">\n    <g id=\"xtick_1\">\n     <g id=\"line2d_1\">\n      <defs>\n       <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"m68b5018896\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"60.539489\" xlink:href=\"#m68b5018896\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_1\">\n      <!-- 0 -->\n      <defs>\n       <path d=\"M 31.78125 66.40625 \nQ 24.171875 66.40625 20.328125 58.90625 \nQ 16.5 51.421875 16.5 36.375 \nQ 16.5 21.390625 20.328125 13.890625 \nQ 24.171875 6.390625 31.78125 6.390625 \nQ 39.453125 6.390625 43.28125 13.890625 \nQ 47.125 21.390625 47.125 36.375 \nQ 47.125 51.421875 43.28125 58.90625 \nQ 39.453125 66.40625 31.78125 66.40625 \nz\nM 31.78125 74.21875 \nQ 44.046875 74.21875 50.515625 64.515625 \nQ 56.984375 54.828125 56.984375 36.375 \nQ 56.984375 17.96875 50.515625 8.265625 \nQ 44.046875 -1.421875 31.78125 -1.421875 \nQ 19.53125 -1.421875 13.0625 8.265625 \nQ 6.59375 17.96875 6.59375 36.375 \nQ 6.59375 54.828125 13.0625 64.515625 \nQ 19.53125 74.21875 31.78125 74.21875 \nz\n\" id=\"DejaVuSans-48\"/>\n      </defs>\n      <g transform=\"translate(57.358239 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_2\">\n     <g id=\"line2d_2\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"182.528922\" xlink:href=\"#m68b5018896\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_2\">\n      <!-- 100 -->\n      <defs>\n       <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n      </defs>\n      <g transform=\"translate(172.985172 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_3\">\n     <g id=\"line2d_3\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"304.518355\" xlink:href=\"#m68b5018896\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_3\">\n      <!-- 200 -->\n      <defs>\n       <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n      </defs>\n      <g transform=\"translate(294.974605 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-50\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_4\">\n     <g id=\"line2d_4\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"426.507789\" xlink:href=\"#m68b5018896\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_4\">\n      <!-- 300 -->\n      <defs>\n       <path d=\"M 40.578125 39.3125 \nQ 47.65625 37.796875 51.625 33 \nQ 55.609375 28.21875 55.609375 21.1875 \nQ 55.609375 10.40625 48.1875 4.484375 \nQ 40.765625 -1.421875 27.09375 -1.421875 \nQ 22.515625 -1.421875 17.65625 -0.515625 \nQ 12.796875 0.390625 7.625 2.203125 \nL 7.625 11.71875 \nQ 11.71875 9.328125 16.59375 8.109375 \nQ 21.484375 6.890625 26.8125 6.890625 \nQ 36.078125 6.890625 40.9375 10.546875 \nQ 45.796875 14.203125 45.796875 21.1875 \nQ 45.796875 27.640625 41.28125 31.265625 \nQ 36.765625 34.90625 28.71875 34.90625 \nL 20.21875 34.90625 \nL 20.21875 43.015625 \nL 29.109375 43.015625 \nQ 36.375 43.015625 40.234375 45.921875 \nQ 44.09375 48.828125 44.09375 54.296875 \nQ 44.09375 59.90625 40.109375 62.90625 \nQ 36.140625 65.921875 28.71875 65.921875 \nQ 24.65625 65.921875 20.015625 65.03125 \nQ 15.375 64.15625 9.8125 62.3125 \nL 9.8125 71.09375 \nQ 15.4375 72.65625 20.34375 73.4375 \nQ 25.25 74.21875 29.59375 74.21875 \nQ 40.828125 74.21875 47.359375 69.109375 \nQ 53.90625 64.015625 53.90625 55.328125 \nQ 53.90625 49.265625 50.4375 45.09375 \nQ 46.96875 40.921875 40.578125 39.3125 \nz\n\" id=\"DejaVuSans-51\"/>\n      </defs>\n      <g transform=\"translate(416.964039 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-51\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_5\">\n     <g id=\"line2d_5\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"548.497222\" xlink:href=\"#m68b5018896\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_5\">\n      <!-- 400 -->\n      <defs>\n       <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n      </defs>\n      <g transform=\"translate(538.953472 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-52\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"xtick_6\">\n     <g id=\"line2d_6\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"670.486656\" xlink:href=\"#m68b5018896\" y=\"561.398438\"/>\n      </g>\n     </g>\n     <g id=\"text_6\">\n      <!-- 500 -->\n      <defs>\n       <path d=\"M 10.796875 72.90625 \nL 49.515625 72.90625 \nL 49.515625 64.59375 \nL 19.828125 64.59375 \nL 19.828125 46.734375 \nQ 21.96875 47.46875 24.109375 47.828125 \nQ 26.265625 48.1875 28.421875 48.1875 \nQ 40.625 48.1875 47.75 41.5 \nQ 54.890625 34.8125 54.890625 23.390625 \nQ 54.890625 11.625 47.5625 5.09375 \nQ 40.234375 -1.421875 26.90625 -1.421875 \nQ 22.3125 -1.421875 17.546875 -0.640625 \nQ 12.796875 0.140625 7.71875 1.703125 \nL 7.71875 11.625 \nQ 12.109375 9.234375 16.796875 8.0625 \nQ 21.484375 6.890625 26.703125 6.890625 \nQ 35.15625 6.890625 40.078125 11.328125 \nQ 45.015625 15.765625 45.015625 23.390625 \nQ 45.015625 31 40.078125 35.4375 \nQ 35.15625 39.890625 26.703125 39.890625 \nQ 22.75 39.890625 18.8125 39.015625 \nQ 14.890625 38.140625 10.796875 36.28125 \nz\n\" id=\"DejaVuSans-53\"/>\n      </defs>\n      <g transform=\"translate(660.942906 575.996875)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-53\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n   </g>\n   <g id=\"matplotlib.axis_2\">\n    <g id=\"ytick_1\">\n     <g id=\"line2d_7\">\n      <defs>\n       <path d=\"M 0 0 \nL -3.5 0 \n\" id=\"mef80010061\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n      </defs>\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#mef80010061\" y=\"518.997727\"/>\n      </g>\n     </g>\n     <g id=\"text_7\">\n      <!-- 0.5 -->\n      <defs>\n       <path d=\"M 10.6875 12.40625 \nL 21 12.40625 \nL 21 0 \nL 10.6875 0 \nz\n\" id=\"DejaVuSans-46\"/>\n      </defs>\n      <g transform=\"translate(7.2 522.796945)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-48\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_2\">\n     <g id=\"line2d_8\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#mef80010061\" y=\"449.002876\"/>\n      </g>\n     </g>\n     <g id=\"text_8\">\n      <!-- 1.0 -->\n      <g transform=\"translate(7.2 452.802094)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_3\">\n     <g id=\"line2d_9\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#mef80010061\" y=\"379.008025\"/>\n      </g>\n     </g>\n     <g id=\"text_9\">\n      <!-- 1.5 -->\n      <g transform=\"translate(7.2 382.807243)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-49\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_4\">\n     <g id=\"line2d_10\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#mef80010061\" y=\"309.013173\"/>\n      </g>\n     </g>\n     <g id=\"text_10\">\n      <!-- 2.0 -->\n      <g transform=\"translate(7.2 312.812392)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-50\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_5\">\n     <g id=\"line2d_11\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#mef80010061\" y=\"239.018322\"/>\n      </g>\n     </g>\n     <g id=\"text_11\">\n      <!-- 2.5 -->\n      <g transform=\"translate(7.2 242.817541)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-50\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_6\">\n     <g id=\"line2d_12\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#mef80010061\" y=\"169.023471\"/>\n      </g>\n     </g>\n     <g id=\"text_12\">\n      <!-- 3.0 -->\n      <g transform=\"translate(7.2 172.82269)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-51\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_7\">\n     <g id=\"line2d_13\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#mef80010061\" y=\"99.02862\"/>\n      </g>\n     </g>\n     <g id=\"text_13\">\n      <!-- 3.5 -->\n      <g transform=\"translate(7.2 102.827839)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-51\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"ytick_8\">\n     <g id=\"line2d_14\">\n      <g>\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#mef80010061\" y=\"29.033769\"/>\n      </g>\n     </g>\n     <g id=\"text_14\">\n      <!-- 4.0 -->\n      <g transform=\"translate(7.2 32.832988)scale(0.1 -0.1)\">\n       <use xlink:href=\"#DejaVuSans-52\"/>\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n      </g>\n     </g>\n    </g>\n    <g id=\"text_15\">\n     <!-- 1e10 -->\n     <defs>\n      <path d=\"M 56.203125 29.59375 \nL 56.203125 25.203125 \nL 14.890625 25.203125 \nQ 15.484375 15.921875 20.484375 11.0625 \nQ 25.484375 6.203125 34.421875 6.203125 \nQ 39.59375 6.203125 44.453125 7.46875 \nQ 49.3125 8.734375 54.109375 11.28125 \nL 54.109375 2.78125 \nQ 49.265625 0.734375 44.1875 -0.34375 \nQ 39.109375 -1.421875 33.890625 -1.421875 \nQ 20.796875 -1.421875 13.15625 6.1875 \nQ 5.515625 13.8125 5.515625 26.8125 \nQ 5.515625 40.234375 12.765625 48.109375 \nQ 20.015625 56 32.328125 56 \nQ 43.359375 56 49.78125 48.890625 \nQ 56.203125 41.796875 56.203125 29.59375 \nz\nM 47.21875 32.234375 \nQ 47.125 39.59375 43.09375 43.984375 \nQ 39.0625 48.390625 32.421875 48.390625 \nQ 24.90625 48.390625 20.390625 44.140625 \nQ 15.875 39.890625 15.1875 32.171875 \nz\n\" id=\"DejaVuSans-101\"/>\n     </defs>\n     <g transform=\"translate(30.103125 14.798438)scale(0.1 -0.1)\">\n      <use xlink:href=\"#DejaVuSans-49\"/>\n      <use x=\"63.623047\" xlink:href=\"#DejaVuSans-101\"/>\n      <use x=\"125.146484\" xlink:href=\"#DejaVuSans-49\"/>\n      <use x=\"188.769531\" xlink:href=\"#DejaVuSans-48\"/>\n     </g>\n    </g>\n   </g>\n   <g id=\"line2d_15\">\n    <path clip-path=\"url(#p73fc16b8be)\" d=\"M 60.539489 42.507528 \nL 80.057798 43.447786 \nL 88.597058 44.063615 \nL 95.916424 44.793838 \nL 102.015896 45.631801 \nL 106.895473 46.50371 \nL 111.775051 47.612317 \nL 115.434734 48.635431 \nL 119.094417 49.858316 \nL 122.7541 51.317442 \nL 126.413783 53.053117 \nL 130.073466 55.108232 \nL 132.513254 56.679572 \nL 134.953043 58.431875 \nL 137.392832 60.384238 \nL 139.83262 62.559135 \nL 142.272409 64.974516 \nL 144.712198 67.651654 \nL 147.151986 70.613425 \nL 149.591775 73.891999 \nL 152.031564 77.506699 \nL 154.471352 81.484417 \nL 156.911141 85.853078 \nL 159.35093 90.641122 \nL 161.790718 95.875728 \nL 164.230507 101.584476 \nL 166.670296 107.793859 \nL 169.110084 114.530767 \nL 171.549873 121.821836 \nL 173.989662 129.690029 \nL 176.42945 138.153811 \nL 178.869239 147.226828 \nL 181.309028 156.922183 \nL 184.968711 172.643059 \nL 188.628394 189.751301 \nL 192.288077 208.174601 \nL 195.94776 227.782886 \nL 200.827337 255.391217 \nL 214.246175 333.098204 \nL 217.905858 352.278562 \nL 220.345646 363.960238 \nL 222.785435 374.542495 \nL 225.225224 383.868496 \nL 227.665012 391.817811 \nL 228.884907 395.249611 \nL 230.104801 398.329832 \nL 231.324695 401.053558 \nL 232.54459 403.432055 \nL 233.764484 405.482698 \nL 234.984378 407.226673 \nL 236.204273 408.690314 \nL 237.424167 409.904082 \nL 238.644061 410.902182 \nL 239.863956 411.720592 \nL 242.303744 412.96865 \nL 245.963427 414.384699 \nL 249.62311 415.889252 \nL 252.062899 417.134428 \nL 254.502688 418.594586 \nL 258.162371 421.091475 \nL 269.14142 428.92548 \nL 274.020997 432.073248 \nL 288.659729 441.04645 \nL 306.958144 452.17464 \nL 319.157087 459.298993 \nL 332.575925 466.815852 \nL 343.554974 472.719462 \nL 354.534023 478.38092 \nL 364.293178 483.154357 \nL 375.272227 488.245384 \nL 386.251276 493.101296 \nL 396.010431 497.168135 \nL 405.769585 501.027159 \nL 416.748634 505.126008 \nL 426.507789 508.489029 \nL 436.266944 511.621473 \nL 446.026098 514.545486 \nL 454.565359 516.891185 \nL 463.104619 519.03489 \nL 472.863774 521.252384 \nL 482.622928 523.230134 \nL 492.382083 524.977807 \nL 503.361132 526.702839 \nL 514.340181 528.157979 \nL 525.31923 529.399299 \nL 538.738068 530.677134 \nL 553.3768 531.838419 \nL 569.235426 532.867371 \nL 587.533841 533.821981 \nL 610.711833 534.793865 \nL 642.429086 535.882827 \nL 669.266761 536.689347 \nL 669.266761 536.689347 \n\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n   </g>\n   <g id=\"patch_3\">\n    <path d=\"M 30.103125 561.398438 \nL 30.103125 17.798438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_4\">\n    <path d=\"M 699.703125 561.398438 \nL 699.703125 17.798438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_5\">\n    <path d=\"M 30.103125 561.398438 \nL 699.703125 561.398438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n   <g id=\"patch_6\">\n    <path d=\"M 30.103125 17.798438 \nL 699.703125 17.798438 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n   </g>\n  </g>\n </g>\n <defs>\n  <clipPath id=\"p73fc16b8be\">\n   <rect height=\"543.6\" width=\"669.6\" x=\"30.103125\" y=\"17.798438\"/>\n  </clipPath>\n </defs>\n</svg>\n",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "source": [
    "# 绘制训练过程的损失变化\n",
    "plt.figure(figsize=(12, 10))\n",
    "plt.plot(range(len(losses_sequential)), losses_sequential)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Sequential(\n  (0): Linear(in_features=149, out_features=128, bias=True)\n  (1): ReLU()\n  (2): Linear(in_features=128, out_features=256, bias=True)\n  (3): ReLU()\n  (4): Linear(in_features=256, out_features=256, bias=True)\n  (5): ReLU()\n  (6): Linear(in_features=256, out_features=256, bias=True)\n  (7): ReLU()\n  (8): Linear(in_features=256, out_features=1, bias=True)\n)\n"
     ]
    }
   ],
   "source": [
    "print(model_sequential)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "model total parameters:  184065\n"
     ]
    }
   ],
   "source": [
    "model_sequential_total_params = sum(p.numel() for p in model_sequential.parameters())\n",
    "print(\"model total parameters: \", model_sequential_total_params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ]
}